/************************************************************************************************
*Definicion de Nodo para listas                                                                 *
*Author     :   Simon Emmanuel Gutierrez Brida                                                  *
*Version    :   0.1                                                                             *
*Fecha      :   Septiembre/2011                                                                 *
*-------------------------------                                                                *
*Define la estructura y funciones asociadas para un Nodo a ser utilizado en listas encadenadas  *
*Un nodo esta formado por :                                                                     *
*- info         :   la informacion contenida por el nodo  (una variable)                        *
*- siguiente    :   un puntero al siguiente nodo                                                *
*************************************************************************************************/

#ifndef NODO_H
#define NODO_H

#include "../variable.h"

struct Nodo {
    Variable *info;
    struct Nodo *next;
};

//struct Nodo;
typedef struct Nodo Nodo;


/*funciones publicas para manipular nodos*/

/*constructores*/

/**
 * Construye un nuevo nodo vacio
 */
Nodo* nuevoNodo_vacio();

/**
 * Construye un nuevo nodo que almacena una variable
 * parametros
 * info: la variable que va a almacenar el nodo
 */
Nodo* nuevoNodo_info(Variable *info);

/**
 * Construye un nuevo nodo que almacena una variable y tiene un nodo que le sigue al mismo
 * parametros
 * info: la variable que va a almacenar el nodo
 * siguiente: el nodo siguiente a este
 */
Nodo* nuevoNodo_info_siguiente(Variable *info, Nodo *siguiente);

/*lectura de informacion*/

/**
 * Obtiene la variable almacenada por un nodo
 * parametros
 * nodo: el nodo del cual se va a obtener la variable
 */
Variable* obtenerInfo(Nodo *nodo);

/**
 * Obtiene el nodo que le sigue a un nodo
 * parametros
 * nodo: el nodo del cual se va a obtener el nodo que le sigue
 */
Nodo* obtenerSiguiente(Nodo *nodo);

/*escritura de informacion*/

/**
 * Define la variable que va almacenar un nodo
 * parametros
 * nodo: el nodo al cual se le va a definir su contenido
 * info: la variable que va a contener el nodo
 */
void definirInfo(Nodo *nodo, Variable *info);

/**
 *Define el nodo siguiente a otro
 *parametros
 *nodo: el nodo al cual definir el siguiente
 *siguiente: el siguiente nodo
 */
void definirSiguiente(Nodo *nodo, Nodo *siguiente);

#endif